package dletc.demo;

public class demo01 {

	public static void main(String[] args) {
		/**
		 * 包装类：将基本数据类型转为引用数据类型的过程  
		 * 		 *****包装类参与运算也满足自动类型提升原理。
		 * 一.8中包装类：
		 * 		基本数据类型	包装类型
		 * 		byte		Byte
		 * 		short		Short
		 * 		int			Integer
		 * 		long		Long
		 * 		float		Float
		 * 		double		Double
		 * 		char		Character
		 * 		boolean		Boolean
		 * 	八种包装类除了char、boolean外都继承至Number类，Number类继承Object类
		 * 二.基本数据类型 --- 包装类 ----String类型之间相互转换
		 * 		基本数据类型转包装类2种方法： JDK1.5以后自动装箱了很少用
		 * 			1.new对象接收：Integer i = new Integer(10);
		 * 			2.调用“类名.valueOf(参数)”方法：Integer i = Integer.valueOf(20);
		 * 		包装类转换基本数据类型： JDK1.5以后 自动拆箱了很少用
		 * 			调用：“引用.xxxxvalue()”方法：
		 * 			Double d1 = Double.valueOf(3.33);//基本转包装类
					double d2 = d1.doubleValue();//包装类转基本数据类型。
				基本数据类型、包装类型转String类型
					调用：“类名.valueOf(参数)”方法
					举例：String str1 = String.valueOf(300);
				String类型----》基本数据类型、包装类型
					调用：“包装类.parse数据类型(参数);”
					int b = Integer.parseInt(s1); //String转基本类型
					Float f = Float.parseFloat(s1);//String转包装类
		 * 三.java1.5以后 已经可以自动装箱 拆箱 ; 自动装箱 拆箱是平级调动（自动向上转型 ），不会向下转型。
		 * 		学这个主要是要掌握把大类型强制转换成你需要的类型，
		 * 		例如:“学习123太好了ajgd”，里面有字母有数字，当只要你取123的时候，就要用到这些思想了
		 * 四、Integer包装类中：包含了一组byte取值范围（-128~127）的数组，在这个取值区间的内存地址是相同的,在方法区中的整数型常量池中。详见下方案例
		 */
		
		Object obj[] = new Object[5];
		
		//正常引用数据类型不能直接存基本数据类型 需要用包装类
		Integer num = new Integer(10);
		//在放入引用类型数组中
		obj[0] = num;
		//java1.5以后 已经可以自动装箱 拆箱。
		obj[1] = 20; 
		
		//基本转包装类
		Character character = Character.valueOf('a');
		System.out.println(character);
		//包装类转基本
		Double d1 = Double.valueOf(3.33);//基本转包装类
		double d2 = d1.doubleValue();//包装类转基本数据类型。
		
		/**
		 * 自动装箱、自动拆箱
		 * 自动装箱：自动将基本数据类型转换包装类（编译器）
		 * 自动拆箱：自动将包装类转换基本数据类型
		 */
		//自动装箱：
			Integer i1 = 20;// 编译器 帮你 Integer.valueOf(20);
			
			Integer i2 = Integer.valueOf(30);
			
		//自动拆箱：
			int i3 = i1;//编译器帮你  i1.Intvalue();
			
			int i4 = i2.intValue();
		/**
		 * 基本数据类型、包装类型----》 String类型
		 * 	String.valueOf();
		 */
			
		//方法1：字符串拼接
			int a = 20;
			String str = a + "";
		
		//方法2
			int i = 10;
			String str1 = String.valueOf(i);
			System.out.println(str1 + 200); //结果为：10200 str1已经是字符串了
			
			
		/**
		 * String类型----》基本数据类型、包装类型
		 * 	方法：包装类.parse数据类型(参数);
		 */
			
			String s1 = "123";
			int b = Integer.parseInt(s1); //String转基本类型
			Float f = Float.parseFloat(s1);//String转包装类
			
		Integer m = 1;
		Integer n = 1;
		System.out.println(m==n);
		//正常应该为false 因为比较的是内存地址 但是java制造者在Integer包装类中创造了一个byte取值范围的引用类型
		//数组，在这个取值范围可以直接用 不用new 内存地址是相同的。所以为：true

	}

}
